package CONTABILIDAD_MODELO;
import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class CON_CUENTA_COMPROBANTE{
	private double ID_COMPROBANTE;
	private double ID;
	private double ID_CUENTA;
	private double ID_PROYECTO;
	private String GLOSA;
	private String DESCRIPCION;
	private double DEBE;
	private double HABER;
	private double CHEQUE;
	private double DEBE_TC;
	private double HABER_TC;
	private double ID_CENTRO_COSTO;
        private double ID_FACTURA;
	private Conexion con = null;

	public CON_CUENTA_COMPROBANTE(){}

	public CON_CUENTA_COMPROBANTE(double HABER_TC,double DEBE_TC,double CHEQUE,double HABER,double DEBE,String GLOSA,double ID_CUENTA,double ID_COMPROBANTE, double ID_CENTRO_COSTO, String DESCRIPCION, Double ID_FACTURA){
		this.HABER_TC =HABER_TC;
		this.DEBE_TC =DEBE_TC;
		this.CHEQUE =CHEQUE;
		this.HABER =HABER;
		this.DEBE =DEBE;
		this.GLOSA =GLOSA;
		this.ID_CUENTA =ID_CUENTA;
		this.ID_COMPROBANTE =ID_COMPROBANTE;
                this.ID_CENTRO_COSTO = ID_CENTRO_COSTO;
                this.DESCRIPCION = DESCRIPCION;
                this.ID_FACTURA = ID_FACTURA;
	}

	public int Insertar() throws Exception{
            String consulta="";
            String id_centro_costo ="null";
            if(ID_CENTRO_COSTO!=0)
                id_centro_costo = ID_CENTRO_COSTO+"";
            
            String id_proyecto ="null";
            if(ID_PROYECTO!=0)
                id_proyecto = ID_PROYECTO+"";
            

            String id_facrtura_prov="null";
            if(ID_FACTURA!=0)
                id_facrtura_prov = ID_FACTURA+"";
            
            String cheque = "null";
            if(CHEQUE!=0.0)
                cheque = CHEQUE+"";
            
                                    
            consulta = "insert into BROKER.CON_CUENTA_COMPROBANTE(HABER_TC,DEBE_TC,CHEQUE,HABER,DEBE,GLOSA,ID_CUENTA,ID_COMPROBANTE, ID_CENTRO_COSTO,ID_PROYECTO, DESCRIPCION, ID_FACTURA) VALUES (TRUNC("+HABER_TC+",10),TRUNC("+DEBE_TC+",10),"+cheque+",TRUNC("+HABER+",10),TRUNC("+DEBE+",10),'"+GLOSA+"',"+ID_CUENTA+","+ID_COMPROBANTE+","+id_centro_costo+","+id_proyecto+",'"+DESCRIPCION+"',"+id_facrtura_prov+")";
            con.EjecutarSentencia(consulta);
            consulta = "select BROKER.CON_CUENTA_COMPROBANTE_SEQ.currval as ID from dual";
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getInt("ID");
	}

	public boolean EliminarXid(){
		try{
			String consulta = "delete from BROKER.CON_CUENTA_COMPROBANTE where ID_COMPROBANTE = "+getID_COMPROBANTE()+" and ID_CUENTA = "+getID_CUENTA();
			con.EjecutarSentencia(consulta);
			return true;
			}
		catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
	public boolean EliminarXComprobante(double id_comprobante) throws SQLException{
            
            String consulta = "delete from BROKER.CON_CUENTA_COMPROBANTE where ID_COMPROBANTE = "+id_comprobante;
            con.EjecutarSentencia(consulta);
            return true;
	}
	public boolean EliminarMultiplesId(String ids) throws SQLException{
            
            String consulta = "delete from BROKER.CON_CUENTA_COMPROBANTE where ID IN ("+ids+")";
            con.EjecutarSentencia(consulta);
            return true;
	}

	public List<CON_CUENTA_COMPROBANTE> Buscar(double id_comprobante) throws SQLException{
		String consulta = "select * from BROKER.CON_CUENTA_COMPROBANTE where ID_COMPROBANTE = "+id_comprobante+" order by ID_CUENTA";
                ResultSet rs = con.EjecutarConsulta(consulta);
                return Cargar(rs);
	}
        		
	public List<CON_CUENTA_COMPROBANTE> Buscar(double id_comprobante,double id_cuenta) throws SQLException{
		String consulta = "select * from BROKER.CON_CUENTA_COMPROBANTE where ID_COMPROBANTE = "+id_comprobante+" and ID_CUENTA = "+id_cuenta;
                ResultSet rs = con.EjecutarConsulta(consulta);
                return Cargar(rs);                
	}
	public CON_CUENTA_COMPROBANTE BuscarxID(double id) throws SQLException{
		String consulta = "select * from BROKER.CON_CUENTA_COMPROBANTE where ID= "+id;
                ResultSet rs = con.EjecutarConsulta(consulta);
                return Cargar(rs).get(0);                
	}

	public List<CON_CUENTA_COMPROBANTE> Todos(){
		try{String consulta = "select * from BROKER.CON_CUENTA_COMPROBANTE";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
	}
        
        
	public double MontoxCuenta(double id, int mes, int ano) throws SQLException{
            con.Transacction();
             String consulta = "SELECT SUM (CON_CUENTA_COMPROBANTE.DEBE_TC) AS DEBE,\n" +
                                "SUM (CON_CUENTA_COMPROBANTE.HABER_TC) AS HABER\n" +
                                "FROM BROKER.CON_CUENTA_COMPROBANTE, BROKER.CON_CUENTA_CONTABLE, BROKER.CON_COMPROBANTE\n" +
                                "WHERE (CON_CUENTA_COMPROBANTE.ID_CUENTA = CON_CUENTA_CONTABLE.ID)\n" +
                                "AND (CON_CUENTA_COMPROBANTE.ID_COMPROBANTE = CON_COMPROBANTE.ID)\n" +
                                "AND (CON_COMPROBANTE.CODIGO LIKE '%-"+mes+"-"+ano+"')\n" +
                                "AND (CON_CUENTA_CONTABLE.ID = "+id+")\n" +
                                "GROUP BY CON_CUENTA_CONTABLE.ID";
            ResultSet rs = con.EjecutarConsulta(consulta);
            Double debe=0.0;
            Double haber=0.0;
            while(rs.next())
            {
                debe+=rs.getDouble("DEBE");
                haber+=rs.getDouble("HABER");
            }
            return haber-debe;
	}                               

	public List<CON_CUENTA_COMPROBANTE> Cargar(ResultSet rs) throws SQLException
        {
            List<CON_CUENTA_COMPROBANTE> lista = new ArrayList<CON_CUENTA_COMPROBANTE>();
            while(rs.next())
            {
                CON_CUENTA_COMPROBANTE objeto = new CON_CUENTA_COMPROBANTE();
                objeto.setHABER_TC(rs.getDouble("HABER_TC"));
                objeto.setDEBE_TC(rs.getDouble("DEBE_TC"));
                objeto.setCHEQUE(rs.getDouble("CHEQUE"));
                objeto.setHABER(rs.getDouble("HABER"));
                objeto.setDEBE(rs.getDouble("DEBE"));
                objeto.setGLOSA(rs.getString("GLOSA"));
                objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
                objeto.setID_CUENTA(rs.getDouble("ID_CUENTA"));
                objeto.setID_COMPROBANTE(rs.getDouble("ID_COMPROBANTE"));
                objeto.setID_CENTRO_COSTO(rs.getDouble("ID_CENTRO_COSTO"));
                objeto.setID_PROYECTO(rs.getDouble("ID_PROYECTO"));
                objeto.setID_FACTURA(rs.getDouble("ID_FACTURA"));
                objeto.setID(rs.getDouble("ID"));                                                           
                objeto.setCon(con);
                lista.add(objeto);
            }
            return lista;            
	}

        public String getDESCRIPCION() {
            return DESCRIPCION;
        }

        public void setDESCRIPCION(String DESCRIPCION) {
            this.DESCRIPCION = DESCRIPCION;
        }
                
	public double getHABER_TC(){
		return HABER_TC;
	}
	public void setHABER_TC(double HABER_TC){
		this.HABER_TC=HABER_TC;
	}

	public double getDEBE_TC(){
		return DEBE_TC;
	}
	public void setDEBE_TC(double DEBE_TC){
		this.DEBE_TC=DEBE_TC;
	}

	public double getCHEQUE(){
		return CHEQUE;
	}
	public void setCHEQUE(double CHEQUE){
		this.CHEQUE=CHEQUE;
	}

	public double getHABER(){
		return HABER;
	}
	public void setHABER(double HABER){
		this.HABER=HABER;
	}

	public double getDEBE(){
		return DEBE;
	}
	public void setDEBE(double DEBE){
		this.DEBE=DEBE;
	}

	public String getGLOSA(){
		return GLOSA;
	}
	public void setGLOSA(String GLOSA){
		this.GLOSA=GLOSA;
	}

	public double getID_CUENTA(){
		return ID_CUENTA;
	}
	public void setID_CUENTA(double ID_CUENTA){
		this.ID_CUENTA=ID_CUENTA;
	}

	public double getID_COMPROBANTE(){
		return ID_COMPROBANTE;
	}
	public void setID_COMPROBANTE(double ID_COMPROBANTE){
		this.ID_COMPROBANTE=ID_COMPROBANTE;
	}

	public Conexion getCon() {
		return con;
	}
	public void setCon(Conexion con) {
		this.con = con;
	}

    public double getID_CENTRO_COSTO() {
        return ID_CENTRO_COSTO;
    }

    public void setID_CENTRO_COSTO(double ID_CENTRO_COSTO) {
        this.ID_CENTRO_COSTO = ID_CENTRO_COSTO;
    }

    public double getID_PROYECTO() {
        return ID_PROYECTO;
    }

    public void setID_PROYECTO(double ID_PROYECTO) {
        this.ID_PROYECTO = ID_PROYECTO;
    }       

    public double getID_FACTURA() {
        return ID_FACTURA;
    }

    public void setID_FACTURA(double ID_FACTURA) {
        this.ID_FACTURA = ID_FACTURA;
    }

    
    public double getID() {
        return ID;
    }

    public void setID(double ID) {
        this.ID = ID;
    }
    
    
}
